package com.ht.api.request.customer;

import java.util.ArrayList;
import java.util.List;

import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONUtil;
import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.db.annotate.FuncGroup;
import com.ht.api.db.annotate.FuncId;
import com.ht.api.db.annotate.FuncName;
import com.ht.api.db.annotate.FuncParam;
import com.ht.api.db.annotate.FuncParams;
import com.ht.api.db.annotate.FuncQuery;
import com.ht.api.db.bean.DataResult;
import com.ht.api.db.bean.SessionBean;
import com.ht.api.db.enums.Param;
import com.ht.api.db.request.IHandleRequest;
import com.ht.api.db.task.HtTaskExecutor;
import com.ht.api.util.CallTestUtil;

import cn.hutool.json.JSONObject;
import lombok.extern.slf4j.Slf4j;

@Slf4j
@FuncId("1914928690270179328")
@FuncGroup("")
@FuncParams({
	@FuncParam(name = "数组", code = "where", value = """
			[
	            {
	                "field": "main_id",
	                "operator": "=",
	                "value": "9221310175454833004"
	            }
		    ]
		""", type = Param.ARRAY),
})

@FuncQuery("wx_workuser_customer")
@FuncName("查询企微客户")
public class QueryWorkuserCustomer implements IHandleRequest {

	@Override
	public void after(SessionBean me, JSONObject param, DataResult result) {
		//写后置函数，将字段state带入到渠道广告位查询，并查询出广告位名称和渠道名称，
		//格式化为：渠道名称-广告位名称，如果没有值，替换state的值，如果没有查询到，则不做改变，
		//注意：直接循环list，可以简单点单条查询，但是使用多线程的方案
		List<Runnable> taskList = new ArrayList<>();
		for (Entity r : result.getRecords()) {
			taskList.add(() -> {
				String sql = "select CONCAT(f.`name`, '-', p.`name`) from position_channel p inner join fan_channel f on p.channel_id=f.main_id where p.state=?";
				String name = Db.val(me.getDataSource(), sql, String.class, r.getStr("state"));
				System.err.println("name>>" + name);
				r.set("state", name);
			});
		}


		JSONArray jsonArray = JSONUtil.createArray();

		HtTaskExecutor.execute(taskList);
	}

	public static void main(String[] args) {
//		System.err.println("@FuncId>>" + HtUtil.getId());

		JSONObject result = CallTestUtil.autoTest(new Object(){}.getClass().getEnclosingClass().getSimpleName());
		System.err.println(result.toStringPretty());
	}
}
